package com.dxb.test.sort;

/**
 * 选择排序
 * 基本思想：
 * 在长度为N的无序数组中，第一次遍历n-1个数，找到最小的数值与第一个元素交换；
 * 第二次遍历n-2个数，找到最小的数值与第二个元素交换；
 * 。。。
 * 第n-1次遍历，找到最小的数值与第n-1个元素交换，排序完成。
 */
public class ChooseSort extends BaseSort {
    public ChooseSort(int[] array) {
        super(array);
    }

    @Override
    public void sort() {
        for (int i = 0; i < length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < length; j++) {
                if (array[minIndex] > array[j]) {
                    minIndex = j;
                }
            }
            swap(i, minIndex);
        }
    }

    public void sort2() {
        for (int i = length - 1; i >= 0; i--) {
            int maxIndex = i;
            for (int j = 0; j < i; j++) {
                if (array[maxIndex] < array[j]) {
                    maxIndex = j;
                }
            }
            swap(i, maxIndex);
        }
    }

    public static void main(String[] args) {
        int[] array = {100, 45, 36, 21, 17, 13, 7};
        ChooseSort cs = new ChooseSort(array);
        cs.run();
    }
}
